import { MenuTypeEnum } from "@/enums/MenuEnum";

/**
 * @description: 菜单查询参数类型
 */
export interface MenuQuery = {
    keywords?; string;
}

/**
 * @description: 菜单视图对象类型
 */
export interface MenuVO {
    /**
     * @description: 菜单ID
     */
    id?: number;
    /**
     * @description: 菜单名称
     */
    name?: string;
    /**
     * @description: 组件路径
     */
    component?: string;
    /**
     * @description: 路径跳转
     */
    redirect?: string;
    /**
     * @description: 子菜单（0:一级菜单; 1:子菜单: 2:按钮权限）
     */
    children?: MenuVO[];
    /**
     * @description: icon
     */
    icon?: string;
    /**
     * 父菜单ID
     */
    parentId?: number;
    /**
     * 按钮权限标识
     */
    prem?: string;
    /**
     * 路由名称
     */
    routeName?: string;
    /**
     * 路由地址，相对路径
     */
    routePath?: string;
    /**
     * 菜单排序
     */
    sort?: number;
    /**
     * 菜单类型
     */
    type?: MenuTypeEnum;
    /**
     * 菜单是否可见
     */
    visible?: boolean;
}

/**
 * 菜单表单对象类型
 */
export interface MenuForm {
    /**
     * @description: 菜单ID
     */
    id?: number;
    /**
     * 父菜单ID
     */
    parentId?: number;
    /**
     * @description: 菜单名称
     */
    name?: string;
    visible?: boolean;
    sort?: number;
    path?: string;
    type?: MenuTypeEnum;
    prem?: string;
    /**
     * @description: 组件路径
     */
    component?: string;
    /**
     * @description: 路径跳转
     */
    redirect?: string;
    /**
     * @description: 子菜单（0:一级菜单; 1:子菜单: 2:按钮权限）
     */
    children?: MenuForm[];
    /**
     * @description: icon
     */
    icon?: string;
    /**
     * 菜单是否开启页面缓存
     */
    keepAlive?: boolean;
    /**
     * 目录只有一个子路由是否始终显示
     */
    alwaysShow?: boolean | number;
};

/**
 * RouteVO, 路由对象
 */
export interface RouteVO {
    /**
     * @description: 路由名称
     */
    name?: string;
    /**
     * @description: 路由地址，相对路径
     */
    path?: string;
    /**
     * @description: 组件路径
     */
    /**
     * 子路由
     */
    children?: RouteVO[];
    /**
     * 路由组件
     */
    component?: string;
    meta?: Meta;
    /**
     * 路由重定向
     */
    redirect?: string;
}

export interface Meta {
    /**
     * @description: 路由名称
     */
    title?: string;
    /**
     * @description: 菜单图标
     */
    icon?: string;
    /**
     * @description: 菜单是否可见
     */
    visible?: boolean;
    /**
     * @description: 是否缓存
     */
    keepAlive?: boolean;
    /**
     * 目录是有一个子路由，是否始终显示
     */
    alwaysShow?: boolean | number;
    /**
     * 路由权限角色编码
     */
    role?: string[];
}